PREFIX	__repmgr

INCLUDE #include "db_int.h"
INCLUDE #include "dbinc/db_swap.h"
INCLUDE

BEGIN_MSG handshake
ARG	port		u_int16_t
ARG	alignment	u_int16_t
ARG	ack_policy	u_int32_t
ARG	flags		u_int32_t
END

BEGIN_MSG v3handshake
ARG	port		u_int16_t
ARG	priority	u_int32_t
ARG	flags		u_int32_t
END

BEGIN_MSG v2handshake
ARG	port		u_int16_t
ARG	priority	u_int32_t
END

BEGIN_MSG parm_refresh
ARG	ack_policy	u_int32_t
ARG	flags		u_int32_t
END

BEGIN_MSG permlsn
ARG	generation	u_int32_t
ARG	lsn		DB_LSN
END

BEGIN_MSG version_proposal
ARG	min		u_int32_t
ARG	max		u_int32_t
END

BEGIN_MSG version_confirmation
ARG	version		u_int32_t
END

BEGIN_MSG msg_hdr
ARG	type		u_int8_t
ARG	word1		u_int32_t
ARG	word2		u_int32_t
END

/* Metadata that goes along with user message on a DB_CHANNEL. */
BEGIN_MSG msg_metadata
ARG	tag		u_int32_t
ARG	limit		u_int32_t
ARG	flags		u_int32_t
END

/*
 * The membership database has a record for each site in the group, plus one
 * extra meta-data record.  The key of the meta-data record has a zero-length
 * host, and a port value of 0.
 */
BEGIN_MSG membership_key check_length
ARG	host		DBT
ARG	port		u_int16_t
END

BEGIN_MSG membership_data
ARG	status          u_int32_t
ARG	flags           u_int32_t
END

BEGIN_MSG v4membership_data
ARG	flags           u_int32_t
END

/*
 * The "format" identifies the content and layout of the records within the
 * membership database (i.e., some of the items defined here in this *.msg
 * file).  It should be incremented when the layouts change in future Berkeley
 * DB releases.  The "version" counts group changes that the application makes
 * by adding or removing sites; thus it varies dynamically thoughout the life of
 * a group, during a single release of Berkeley DB.
 */ 
BEGIN_MSG member_metadata
ARG	format		u_int32_t
ARG	version		u_int32_t
END

/*
 * When a new site wants to join a group, it "guesses" that the configured
 * "helper" site is the master, and sends the request there.  When that guess
 * is wrong, the helper site responds with the location of the current master,
 * in effect "forwarding" the request.
 */
BEGIN_MSG gm_fwd check_length
ARG	host		DBT
ARG	port		u_int16_t
ARG	gen		u_int32_t
END

/* Membership list version header: */
BEGIN_MSG membr_vers
ARG	version		u_int32_t
ARG	gen		u_int32_t
END

BEGIN_MSG site_info check_length
ARG	host		DBT
ARG	port		u_int16_t
ARG	status		u_int32_t
ARG	flags		u_int32_t
END

BEGIN_MSG v4site_info check_length
ARG	host		DBT
ARG	port		u_int16_t
ARG	flags		u_int32_t
END

/*
 * If site A breaks or rejects a connection from site B, it first
 * tries to send B this message containing site A's currently known
 * membership DB version and site B's status in site A's membership DB.
 * Site B can use them to decide what to do.  If site B knows of a later
 * version, it should retry the connection to site A later, polling
 * until site A catches up.  However, if site B's known version is
 * less and site B's status is adding in site A's membership DB, it
 * means that a badly-timed change of master may have caused the current
 * master to lose B's membership DB update to present, so it should
 * retry the connection to site A later, otherwise, site B is no longer
 * in the group and it should shut down and notify the application.
 */
BEGIN_MSG connect_reject
ARG	version		u_int32_t
ARG	gen		u_int32_t
ARG	status		u_int32_t
END

BEGIN_MSG v4connect_reject
ARG	version		u_int32_t
ARG	gen		u_int32_t
END

/*
 * For preferred master LSN history comparison between the sites.
 * The next_gen_lsn is [0,0] if the next generation doesn't yet exist.
 */
BEGIN_MSG lsnhist_match
ARG	lsn		DB_LSN
ARG	hist_sec	u_int32_t
ARG	hist_nsec	u_int32_t
ARG	next_gen_lsn	DB_LSN
END
